#include<cstdio>
#include<cstring>
const int STOP=1000;
const int maxn=110;
const double EPS=1e-10;
double dp[3*maxn][maxn];
int m[maxn],N,NF,NB,NS;
int main()
{
	memset(m,0,sizeof(m));
	scanf("%d",&N);
	scanf("%d",&NF);
	for(int i=1;i<=NF;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		m[x]=y;
	}
	scanf("%d",&NB);
	for(int i=1;i<=NB;i++)
	{
		int x,y;
		scanf("%d%d",&x,&y);
		m[x]=-y;
	}
	scanf("%d",&NS);
	for(int i=1;i<=NS;i++)
	{
		int x;
		scanf("%d",&x);
		m[x]=STOP;
	}
	memset(dp,0,sizeof(dp));
	dp[0][0]=1;
	double ans=0.0;
	for(int i=0;i<=200;i++)
	{
		for(int j=0;j<N;j++)
		{
			if(dp[i][j]<EPS)continue;
			for(int k=1;k<=6;k++)
			{
				int pos=j+k;
				if(pos<0)pos=-pos;
				if(pos>N)pos=2*N-pos;
				if(m[pos]==STOP)dp[i+2][pos]+=dp[i][j]/6.0;
				else
				{
					pos+=m[pos];
					if(pos<0)pos=-pos;
					if (pos>N)pos=2*N-pos;
					dp[i+1][pos]+=dp[i][j]/6.0;
				}
			}
		}
	}
	for(int i=1;i<200;i++)
		ans+=dp[i][N]*i;
	if(ans<0.005)printf("Impossible\n");
	else printf("%0.2lf\n",ans);
	return 0;
}
